# 1、写函数,将传入的列表或元祖对象的奇数位索引对应的元素输出
# odd = eval(input('请输入一个列表'))
# def oddNumber(n):
#     for i in range(1,len(odd),2):
#         print(odd[i])
# oddNumber(odd)


# 2、写函数,判断用户传入的对象(string,list,tuple)长度是否大于5
# def length(item):
#     if len(item) > 5:
#         print('所输入的长度大于5')
#     else:
#         print('所输入的长度不大于5')
# length([1,2,3,6,7,8])
# length((1,2))
# length('hellommm')

# 3、写函数,计算传入的string中,数字,字母,空格以及其它内容的个数,并返回结果
# string1 = input('请输入字符串：')
# def count_in_string(n):
#     number = 0  #数字个数
#     letter = 0  #字母个数
#     space = 0   #空格个数
#     other = 0  #其他内容个数
#     for i in string1:
#         if i.isdigit():  #判断是否为数字
#             number += 1
#         elif i.isalpha():  #判断是否为字母
#             letter += 1
#         elif i.isspace():  #判断是否为空格
#             space += 1
#         else:
#             other += 1  #其他
#     print(number,letter,space,other)
# count_in_string(string1)



# 4、写函数,接收两个数字参数,返回较大的那个数字
#没有返回值的
# num1 = int(input('请输入一个数字:'))
# num2 = int(input('请再输入一个数字:'))
# def max_number(x,y):
#     max = num1
#     if num2 > max:
#         print(num2)
#     else:
#         print(num1)
# max_number(num1,num2)

#有返回值的
# num1 = int(input('请输入一个数字:'))
# num2 = int(input('请再输入一个数字:'))
# def max_number(x,y):
#     return x if x>y else y
# print(max_number(num1,num2))


# 5、编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
# def cacluate(*args):
#     return args
# print(cacluate(10,20,30,50),type(cacluate(10,20,30,50)))


# 6、编写一个函数, 接收字符串参数, 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
# string = input('请输入一个字符串：')
# def count_number(s):
#     low_number = 0  #小写字母个数
#     up_number = 0  #大写字母个数
#     for char in string:
#         if char.islower():  #判断是否为小写
#             low_number += 1
#         elif char.upper():  #判断是否为大写
#             up_number += 1
#     return low_number,up_number
# print(count_number(string),type(count_number(string)))


# 7、编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和一个整形数k, 返回一个新列表.
# import random
# list  = [random.randint(1,100) for item in range(30)]  #随机生成30个数在1到100范围内
# k = int(input('请输入一个整数：'))
# print(list)
# # 函数需求:
# # 将列表下标k之前对应(不包含k)的元素逆序;
# def reverse_k0(x):
#     list1 = []  # 定义2个list的空列表
#     list2 = []
#     for i in range(0,x):
#         list1.append(list[i])
#     list1.reverse()  #不能写在循环里边，写早循环里边每次循环都转换一次，测试在2以上的k就不对了
#     for i in range(x,len(list)):
#         list2.append(list[i])
#     print(list1 + list2)
# reverse_k0(k)
# # 将下标k及之后的元素逆序;
# def reverse_k1(x):
#     list1 = []
#     list2 = []
#     for i in range(x,len(list)):
#         list1.append(list[i])
#     list1.reverse()
#     for i in range(0,x):
#         list2.append(list[i])
#     print(list2 + list1)
# reverse_k1(k)


# 8、编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值
# x = int(input('请输入一个数字：'))
# n = int(input('再输入一个数字：'))
# def sum_n(a,b):
#     sum = 0
#     now = 0
#     for i in range(1,b+1):
#         now = now * 10 + a
#         sum += now
#     return sum
# print(sum_n(x,n))


# 9、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
# name = input('请输入你的姓名：')
# sex = input('请输入你的性别（输入空格默认为男）：')
# age = input('请输入你的年龄：')
# address = input('请输入你的地址')
# def receive(name, sex="男", age=None, address=None):
#     decribe = f'姓名：{name},性别：{sex},年龄：{age},地址：{address}'
#     return decribe
# if sex.isspace():
#     print(receive(name, age = age, address = address))  # 不传递 sex 参数，使用默认值  name 是用位置传参，age和address是用关键字传参
# else:
#     print(receive(name, sex, age, address))  # 传递用户输入的 sex 值



# 10、写函数,接收n个数字,返回这些数字的和(动态传参)
#第一种
# n = int(input('请输入想要输入的个数：'))
# number = []
# for i in range(n):
#     num = int(input('输入数字：'))
#     number.append(num)
# def sum_n(*args):
#     return sum(number)
# sum1 = sum_n(*number)
# print(sum1)

#第二种
# user_input = input('请输入数字，中间用空格分开：')
# input_list = user_input.split(' ')
# # print(input_list)
# def sum_n(*argc):
#     int_list = [int(item) for item in input_list]
#     return sum(int_list)
# print(sum_n(input_list))


# 11、在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs里

# 12、写函数,把传过来的列表中的每一个元素都用"_"拼接,并返回
# user_input = input('请输入元素，每个元素用逗号分隔')
# input_list= user_input.split(',')
# def link(list):
#     return '-'.join(item for item in list)  #用join函数进行连接
# print(link(input_list))


# 13、写函数,传入一个数字,返回这个数的阶乘。示例：1x2x3....
# num = int(input('请输入一个数字：'))
# def fun(n):
#     if(n == 1):
#         return 1
#     else:
#         return n * fun(n-1)
# print(fun(num))

# 14、写函数,返回一个扑克牌列表,里面有52项,每一项都是一个tuple
# def cards():
#     color = ['红桃','方片','黑桃','草花']
#     number = [1,2,3,4,5,6,7,8,9,10,'J','Q','K']
#     for co in color:
#         for nu in number:
#             print((co, nu))
# card = cards()

# 15、编写函数，求1+2+3+…N的和
# num = int(input('请输入一个数字：'))
# def sum(n):
#     sum1 = 0
#     for i in range(1,n+1):
#         sum1 += i
#     return sum1
# print(sum(num))



# 16、编写一个函数，求多个数中的最大值
# num = input('请输入多个数字（数字之间用空格分开）：')
# input_num = num.split(' ')
# def max_num(*args):
#     int_num = [int(i) for i in input_num]
#     return max(int_num)
# print(max_num(num))

# 17、编写一个函数，提取指定字符串中所有的字母，然后拼接在一起产生一个新的字符串
# def new_string(s):
#     return ''.join(c for c in s if c.isalpha())
# '''
# join() 方法属于字符串类型的方法，它接受一个可迭代对象，并将其中的元素组合成一个单一的字符串。
# 使用空字符串 '' 作为分隔符意味着直接连接这些字符，而不插入任何额外的字符或空格。
# '''
# str = '458\792kshxakb456xca'
# print(new_string(str))

# 18、写一个函数，求多个数的平均值
# num = input('请输入多个数字（数字之间用空格分隔）：')
# input_num = num.split(' ')
# def avg_num(*args):
#     int_num = [int(i) for i in input_num]
#     return sum(int_num)/len(int_num)
# print(avg_num(num))



# 19、写一个自己的len函数，统计指定序列中元素的个数
# string = input('请输入多个字符，每个字符用空格分隔：')
# input_string = string.split(' ')
# def len(*args):
#     count = 0
#     for i in input_string:
#         count += 1
#     return count
# print(len(string))


# 20、找出传入的列表或元组的奇数位对应的元素，并返回一个新的列表
# num = input('请输入多个元素，每个元素用刻个分隔：')
# input_num = num.split(' ')
# def odd(*args):
#     new_list = input_num[1::2]
#     return new_list
# print(odd(num))



# 21、水仙花数：个位、十位、百位的立方加在一起等于数的本身
# num = int(input('请输入一个数字：'))
# def flower_num(n):
#     one = num % 10
#     ten = num % 100 // 10  #/是普通乘法。会导致浮点数  //整除运算符
#     hundred = num // 100
#     sum = pow(one,3) + pow(ten,3) + pow(hundred,3)
#     if sum == num:
#         print('是水仙花数')
#     else:
#         print('不是水仙花数')
# flower_num(num)



# 22、 定义函数，有一个形参，传入的是列表，数组大小不超过 100个，
# 数组中的每个元素值不允许超过 100，但是可以等于100，
# 如果列表大小超过了100个截取到第100个为止，要求返回的列表格式：
# 删除所有重复元素，使得每个元素只出现一次
# 按照数字的大小，由高到低排序返回
# string = input('请输入多个字符，每个字符之间用空格分隔：')
# string_list = string.split(' ')
# def fun(*args):
#     new_list = string_list[:100]
#     unique_list = list(set(string_list))   #先去重再返回列表结构 set完事返回的不是列表类型，需要转回列表
#     sort_list = sorted(unique_list)
#     return sort_list
# print(fun(string))

# 23、定义函数 getLength，打印用户传入的容器类型和数据长度
# def GetLength(item):
#     print("容器类型为：",type(item))
#     print('长度为：',len(item))
# list = [1,2,3]
# tuple = (1,2,3,4)
# str = 'hello'
# set = {1,2,3,5,7,8,9}
# d = {10:'cat',20:'dog',30:'pet'}
# GetLength(list)
# GetLength(tuple)
# GetLength(str)
# GetLength(set)
# GetLength(d)


# 24、定义函数 generateNum( )

# 25、定义函数 moreThan(num)，判断输入的数字是否大于1500
# num = int(input('请输入数字：'))
# def moreThan(n):
#     if n > 1500:
#         print('大于1500')
#     else:
#         print('不大于1500')
# moreThan(num)


# 26、定义函数，有两个形参，第一个形参到第二个形参的范围，所有平方数之和
# num1 = int(input('请输入起始数字：'))
# num2 = int(input('请输入结束数字：'))
# def sum(x,y):
#     sum = 0
#     for i in range(x,y+1):
#         sum += pow(i,2)
#     return sum
# print(sum(num1,num2))



# 27、写函数，检查传入字典的每一个value长度，如果大于2，
# 那么仅保留前两个长度的内容， 并将新内容返回给调用者
# def new_str(string):
#     if len(string) > 2:
#         return string[0] + string [1]
# str = 'hahaha'
# print(new_str(str))


#  28、写函数，判断用户传入的对象（字符串、列表、元组）的元素是否为空
# def is_empty(obj):
#     if(len(obj) == 0):
#         print('为空')
#     else:
#         print('非空')
# is_empty('')
# is_empty('hello')
# is_empty([])
# is_empty([1,2,3])
# is_empty(())
# is_empty((1,2,3))



# 29、编写自定义函数，完成一个简单的减法运算函数
# num1 = int(input('请输入被减数：'))
# num2 = int(input('请输入减数：'))
# def sub(x,y):
#     num = x-y
#     return num
# print(sub(num1,num2))


# 30、编写自定义函数，可以输出自己的名字即可。
# name = input('请输入自己名字：')
# def put_name(s):
#     print(s)
# put_name(name)



# 31、编写自定义函数：剪刀石头布
# 游戏开始，初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分。
# 当用户为 0 分时，游戏结束，提示游戏结束，比赛输了
# 当用户为 200 分时，游戏结束，提示游戏结束，赢得比赛、每轮比赛都输出当前的分数
# 1 代表剪刀 2 代表石头 3 代表布
# import random
# use = int(input('请输入你的操作（1为剪刀，2为石头，3为布）：'))
# def fun(n):
#     score_user = 100
#     computer = random.randint(1,3)
#     print(computer)
#     if n == 1 and computer == 1:
#         score_user = score_user
#     elif n == 1 and computer == 2:
#         score_user -= 10
#     elif n == 1 and computer == 3:
#         score_user += 10
#     elif n == 2 and computer == 1:
#         score_user += 10
#     elif n == 2 and computer == 2:
#         score_user = score_user
#     elif n == 2 and computer == 3:
#         score_user -= 10
#     elif n == 3 and computer == 1:
#         score_user -= 10
#     elif n == 3 and computer == 2:
#         score_user += 10
#     elif n == 3 and computer == 3:
#         score_user = score_user
#     print(score_user)
# fun(use)



# 32、编写一个函数，接受一个字符串作为参数，并返回该字符串的逆序字符串
# def re(s):
#     return s[::-1]
# string = input('请输入一个字符串：')
# print(re(string))


# 33、编写一个函数，接受一个数字列表作为参数，并返回其中所有偶数的列表
# def re_even(number):
#     list = [num for num in number if num % 2 == 0]
#     return list
# nums = [1,2,3,4,5,6]
# even_number = re_even(nums)
# print(even_number)


# 34、编写一个函数，接受一个字符串列表作为参数，并返回其中最长的字符串。
# def re_long_str(string):
#     long_str = string[0]
#     for s in string[1:]:
#         if len(s) > len(long_str):
#             long_str = s
#     return long_str
# str = ['hello','wo','I','love','you']
# print(re_long_str(str))


# 35、编写一个函数，接受一个数字列表作为参数，并返回其中所有数字的平方的总和
# def sq_sum(numbers):
#     sum = 0
#     list = [i*i for i in numbers]
#     for num in list:
#         sum += num
#     return sum
# num = [1,2,3,4]
# print(sq_sum(num))


# 36、编写一个函数，接受一个字符串作为参数，并返回其中所有单词的首字母的大写形式
# def upper_str(strings):
#     return strings.title()  #title() 是 Python 中字符串对象的一个方法，它会将一个字符串中的每个单词的首字母都转换为大写，而单词中其余的字母则全部转换为小写。
# str = 'hello,world'
# print(upper_str(str))


# 37、编写一个函数，接受两个列表作为参数，并返回两个列表的交集
# 举例：
# list1 = [100,200,300,454]
# list2 = [454,789,125,46]
# # 返回：[454]
# def mixed(l1,l2):      #&不支持列表，需要转成集合才能用
#     s1 = set(l1)
#     s2 = set(l2)
#     return s1 & s2
# list1 = [100,200,300,454]
# list2 = [454,789,125,46]
# print(list(mixed(list1,list2)))   #要求返回[454]所以需要转回列表


#  38、定义一个学生注册函数enroll()，打印学生姓名，性别，年龄，城市
# def enroll(name,sex,age,city):
#     print(f'姓名：{name}')
#     print(f'性别：{sex}')
#     print(f'年龄：{age}')
#     print(f'城市：{city}')
# enroll('海绵宝宝','男',18,'海底')